'use client'; import { useEffect, useState } from 'react'; import { useSearchParams, useRouter } from 'next/navigation'; import Link from 'next/link'; import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { CheckCircle, XCircle, Loader2 } from 'lucide-react'; import { useTranslations } from "next-intl"; interface VerifyEmailFormProps { locale: string; } export default function VerifyEmailForm({ locale }: VerifyEmailFormProps) { const [status, setStatus] = useState<'loading' | 'success' | 'error'>('loading'); const [message, setMessage] = useState(''); const searchParams = useSearchParams(); const router = useRouter(); const t = useTranslations("auth.verifyEmail"); const tErrors = useTranslations("auth.errors"); useEffect(() => { const token = searchParams.get('token'); if (!token) { setStatus('error'); setMessage(t('invalidToken')); return; } // 验证邮箱 const verifyEmail = async () => { try { const response = await fetch(`/api/auth/verify-email?token=${token}`); const data = await response.json(); if (response.ok) { setStatus('success'); setMessage(t('success')); } else { setStatus('error'); setMessage(data.error || tErrors('verificationFailed')); } } catch (error) { setStatus('error'); setMessage(tErrors('networkError')); } }; verifyEmail(); }, [searchParams, t, tErrors]); const handleGoToLogin = () => { router.push(`/${locale}/auth/login`); }; return (
{status === 'loading' && (
)} {status === 'success' && (
)} {status === 'error' && (
)}
{status === 'loading' && t('verifying')} {status === 'success' && t('success')} {status === 'error' && t('error')} {message}
{status !== 'loading' && ( {status === 'success' && (

{t('successTitle')}

  • • {t('canLogin')}
  • • {t('accessFeatures')}
  • • {t('enjoyService')}
)} {status === 'error' && (

{t('possibleReasons')}

  • • {t('linkExpired')}
  • • {t('linkInvalid')}
  • • {t('alreadyVerified')}
)}
)} {status !== 'loading' && ( {status === 'success' && ( )} {status === 'error' && ( <> {t('backToLogin')} )} )}
); }